/**
 * ************************************************************************
 *
 * @file    SEGGER_RTT_log.h
 * @brief   SEGGER_RTT打印log
 * @author  负号科技(fuhaokj@foxmail.com)
 * @version 0.1
 * @date    2023-05-31
 *
 * ************************************************************************
 *   __       _                 _    _
 *  / _|     | |               | |  (_)
 * | |_ _   _| |__   __ _  ___ | | ___
 * |  _| | | | '_ \ / _` |/ _ \| |/ / |
 * | | | |_| | | | | (_| | (_) |   <| |
 * |_|  \__,_|_| |_|\__,_|\___/|_|\_\ |
 *                                 _/ |
 *                                |__/
 *
 * @copyright Copyright (c) 2023 负号科技
 * For study and research only, no reprinting
 * ************************************************************************
 */
#ifndef SSEGGER_RTT_LOG_H
#define SSEGGER_RTT_LOG_H

#include "SEGGER_RTT.h"
#include "stm32f1xx_hal.h"

#define RTT_COM 1 /*日志通道*/
#ifdef __cplusplus
extern "C"
{
#endif

#define LOG_BUF_SIZE 128

    typedef long long (*get_sys_time_ms_def)(void);

    enum log_class
    {
        L_C_NULL = 0,
        L_C_EEEOR = 1, /*错误*/
        L_C_INFO = 2,  /*信息*/
        L_C_DEBUG = 3, /*调试*/
        L_C_WARN = 4   /*警告*/
    };
    void log_print(enum log_class class, const char *file, int line, const char *func, const char *fmt, ...);

/*当定义了USE_DEBUG，输出数据信息变量名 变量值*/
#define LOG_DEBUG
// #undef LOG_DEBUG
#ifdef LOG_DEBUG

#define log_Init() SEGGER_RTT_Init()
#define LOG_print(...) log_print(L_C_NULL, __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__)
#define LOG_error(...) log_print(L_C_EEEOR, __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__)                /*错误*/
#define LOG_info(...) log_print(L_C_INFO, __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__)                  /*信息*/
#define LOG_debug(...) log_print(L_C_DEBUG, __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__)                /*调试*/
#define LOG_warn(...) log_print(L_C_WARN, __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__)                  /*警告*/
#define LOG_Expr(Expr) log_print(L_C_INFO, __FILE__, __LINE__, __FUNCTION__, "%s : %d\r\n", #Expr, Expr); /*输出字符*/

#else

#define log_Init()
#define LOG_D(...)
#define LOG_error(...)
#define LOG_info(...)
#define LOG_debug(...)
#define LOG_warn(...)
#define LOG_Expr(Expr)
#endif

#ifdef __cplusplus
}
#endif
#endif
